# 从pandas库中导入read_csv函数，用于读取CSV文件
from pandas import read_csv
from matplotlib import pyplot as plt
import pandas as pd

# 导入数据集
# 设置CSV文件的路径，指向您的工作目录中的"附件2.csv"文件
filename = '/Users/hunternotgod/PycharmProjects/DataAnalyseStu/附件2.csv'

# 定义数据集的列名
# 这些名称将作为DataFrame的列标题
names = ['方向', '时间', '车牌号', '交叉口']

# 使用pandas的read_csv函数读取CSV文件
# encoding='gbk'参数指定文件编码为GBK，以正确读取中文内容
# names参数指定了列名
# skiprows=1 跳过第一行（重复的列名）
# low_memory=False 避免数据类型混合的警告
dateset = read_csv(filename, names=names, encoding='gbk', skiprows=1, low_memory=False)

# 将时间列转换为datetime类型
dateset['时间'] = pd.to_datetime(dateset['时间'])

# 打印数据集的维度信息
print('数据维度：行 %s, 列 %s' % dateset.shape)

# 查看一下数据集(默认前五行)
print("\n数据预览：")
print(dateset.head())

# 描述性统计
print("\n描述性统计：")
print(dateset.describe())

# 数据分布情况
print("\n各方向数据分布：")
print(dateset.groupby('方向').size())

# 创建可视化图表
plt.figure(figsize=(15, 10))

# 1. 各方向数据分布饼图
plt.subplot(2, 2, 1)
direction_counts = dateset['方向'].value_counts()
plt.pie(direction_counts, labels=direction_counts.index, autopct='%1.1f%%')
plt.title('各方向数据分布')

# 2. 各交叉口数据分布条形图
plt.subplot(2, 2, 2)
cross_counts = dateset['交叉口'].value_counts().head(10)  # 只显示前10个
cross_counts.plot(kind='bar')
plt.title('前10个交叉口数据分布')
plt.xticks(rotation=45)

# 3. 时间分布直方图
plt.subplot(2, 2, 3)
dateset['时间'].dt.hour.hist(bins=24)
plt.title('24小时数据分布')
plt.xlabel('小时')
plt.ylabel('频次')

# 4. 车牌号统计
plt.subplot(2, 2, 4)
plate_counts = dateset['车牌号'].value_counts().head(10)  # 只显示前10个
plate_counts.plot(kind='bar')
plt.title('前10个车牌号出现频次')
plt.xticks(rotation=45)

plt.tight_layout()  # 自动调整子图布局
plt.show()
